VegaS
-
Posts
363 -
Joined
-
Last visited
-
Days Won
40 -
Feedback
0%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by VegaS
-
-
UserInterface\PythonShop.cpp
-
Since eternexus etc. can not find certain characters unpack eg 01.¼º / ³ª¹ "and then be renamed locations and made new ones.
This is in the property, some of its folders/files have Chinese chars in its names.
Here are resolved:
!mUpUbnlzFcJaltR7nKBaLuiIUifpKIVX8WFxHGbl1eI
You can go in property/property and creates a file named for * list * like that:
- 40
- 2
- 3
- 1
- 1
- 1
- 5
- 25
-
I mention that all these functions are shit, we just did in a hurry, we have not tested, they are just tools to check code that do not have very bright but functional.
Someone wanted this and even more people from a certain conference, so I made this little tutorial.
These features give you the chance to check the following:
- To introduce reading a game DLL source automatically.
- To check the size of the DLL in question.
- To check more files in the client if that which corresponds md5 version of the file.ffd:h -> http://pastebin.com/1TXW32Qu
Src/Client/UserInterface/Locale_inc.h
#define __ENABLE_DLL_CHECK__ // enable #define __ENABLE_CHECK_SIZE__ // check size of files #define __ENABLE_CHECK_MD5__ // check md5 of files #define __SIZE_DLL__ 54200 // size in kb
Src/Client/UserInterface/UserInterface.cpp
#include "ffd.h" // Put file ffd.h in Extern/include/
#ifdef __ENABLE_DLL_CHECK__ int FunctionGetFileSize(char* FileName) { HANDLE pFile_done = CreateFileA(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); return FunctionGetFileSize(pFile_done, NULL); } #endif #ifdef __ENABLE_CHECK_MD5__ void FunctionGetFileMD5(char* cFile, char* hash) { MD5 ffd; if (strcmp(ffd.digestFile(cFile), hash)) { MessageBoxA(NULL, "It was detected a change to a file. Please do update the autopatcher!", "#System Error", NULL); exit(0); } } #endif
You can check this function in :
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
#ifdef __ENABLE_DLL_CHECK__ const char* keyName = "name_your_dll"; HINSTANCE hGetProcIDDLL = LoadLibrary(keyName + ".dll"); if (hGetProcIDDLL == NULL) { MessageBox(NULL, "The customer name can not start without dll_vegas.dll, please update your autopatcher.", "#System Error", MB_ICONSTOP); return 0; } #endif #ifdef __ENABLE_CHECK_SIZE__ if (FunctionGetFileSize(keyName + ".dll") != __SIZE_DLL__) //kb { MessageBox(NULL, "DLL has been changed, please update.", "#System Error", MB_ICONSTOP); return 0; } #endif
#ifdef __ENABLE_CHECK_MD5__ const char* MILES_key_MD5_Index_0 = "miles/mssdsp.flt"; const char* MILES_key_MD5_Index_0 = "miles/msssoft.m3d"; const char* MILES_key_MD5_Index_0 = "miles/mssa3d.m3d"; const char* MILES_key_MD5_Index_0 = "miles/mss32.dll"; const char* DLL_key_MD5_Index_0 = "python27.dll"; const char* DLL_key_MD5_Index_1 = "mss32.dll"; const char* LIB_key_MD5_Index_0 = "ib/__future__.pyc"; const char* LIB_key_MD5_Index_1 = "lib/copy_reg.pyc"; const char* LIB_key_MD5_Index_2 = "lib/linecache.pyc"; const char* LIB_key_MD5_Index_3 = "lib/ntpath.pyc"; const char* LIB_key_MD5_Index_4 = "lib/os.pyc"; const char* LIB_key_MD5_Index_5 = "lib/site.pyc"; const char* LIB_key_MD5_Index_6 = "lib/stat.pyc"; const char* LIB_key_MD5_Index_7 = "lib/string.pyc"; const char* LIB_key_MD5_Index_8 = "lib/traceback.pyc"; const char* LIB_key_MD5_Index_9 = "lib/types.pyc"; const char* LIB_key_MD5_Index_10 = "lib/UserDict.pyc"; const char* Index_key_md5_ = "pack/Index"; const char* PACK_key_MD5_Index_0 = "pack/root.eix"; const char* PACK_key_MD5_Index_1 = "pack/ETC.eix"; const char* PACK_key_MD5_Index_2 = "pack/locale_en.eix"; ///////////// VERIFICATION PATCH MILES /////////////////// FunctionGetFileMD5(MILES_key_MD5_Index_0,"cb71b1791009eca618e9b1ad4baa4fa9"); FunctionGetFileMD5(MILES_key_MD5_Index_1,"bdc9ad58ade17dbd939522eee447416f"); FunctionGetFileMD5(MILES_key_MD5_Index_2,"e089ce52b0617a6530069f22e0bdba2a"); FunctionGetFileMD5(MILES_key_MD5_Index_3,"6400e224b8b44ece59a992e6d8233719"); ///////////// VERIFICATION PATCH DLL /////////////////// FunctionGetFileMD5(DLL_key_MD5_Index_0,"d219c0a8aff2c771946d73554916bd9a"); FunctionGetFileMD5(DLL_key_MD5_Index_1,"6400e224b8b44ece59a992e6d8233719"); ///////////// VERIFICATION PATCH LIB /////////////////// FunctionGetFileMD5(LIB_key_MD5_Index_0,"d2505c6e64dc44a1745dda0905f4e787"); FunctionGetFileMD5(LIB_key_MD5_Index_1,"5e996d35b598676b253dd25fa3809ef2"); FunctionGetFileMD5(LIB_key_MD5_Index_2,"c4c28529b05b4093f629fb7b23603cd2"); FunctionGetFileMD5(LIB_key_MD5_Index_3,"966048f390a65bebf60f912845441110"); FunctionGetFileMD5(LIB_key_MD5_Index_4,"9e1e72faaafcde16dfd0e643a31f0b74"); FunctionGetFileMD5(LIB_key_MD5_Index_5,"8336371539a459e72d7110f0cb1ed84f"); FunctionGetFileMD5(LIB_key_MD5_Index_6,"3dc2d3d11ba4c668a0097fbd631c7be6"); FunctionGetFileMD5(LIB_key_MD5_Index_7,"39c29074226b2196e7f13ce93560d3d0"); FunctionGetFileMD5(LIB_key_MD5_Index_8,"009e6647dfac211b6e69c6b3f1ed5600"); FunctionGetFileMD5(LIB_key_MD5_Index_9,"2bff75340aa1d94b88bfc7915a291564"); FunctionGetFileMD5(LIB_key_MD5_Index_10,"aabdd94dfe3a1b0092f0a414a935c091"); ///////////// VERIFICATION INDEX /////////////////// FunctionGetFileMD5(Index_key_md5_,"8823ca827dfc980798856e97f3568cef"); ///////////// VERIFICATION FILES PACK /////////////////// FunctionGetFileMD5(PACK_key_MD5_Index_0,"ce13b7c96f725b7d7c39cbe1ae2f8b4d"); FunctionGetFileMD5(PACK_key_MD5_Index_1,"7c0b756d079a9c76a220a724b9594eeb"); FunctionGetFileMD5(PACK_key_MD5_Index_2,"5b1aea18b89330481e16eca94673951c"); #endif
- 19
- 2
- 1
- 1
- 1
- 2
- 23
-
For members who saw this post and want and overtake them this:
common/item_length.h
ITEM_NAME_MAX_LEN = 24,
gameLib/ItemData.h
ITEM_NAME_MAX_LEN = 24,
dump_proto/dump_proto.cpp
ITEM_NAME_MAX_LEN = 24,
- 2
-
I made these tutorial at the request of a member from this community who wanted to buy this very simple verification.
SpoilerExample quest:
quest shit_function begin state start begin when kill with npc.is_pc() begin local global_insult_sex if pc.get_sex() == 0 then global_insult_sex = "gay" else global_insult_sex = "bitch" end local check_my_ip = pc.get_ip() local check_enemy_ip = npc.get_ip() if check_my_ip == check_enemy_ip then say("You're too "..global_insult_sex.."!") return end end end end
Server/quest_functions
pc.get_ip npc.get_ip
Src/game/questlua_pc.cpp
int pc_get_ip(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if(!ch) return 0; lua_pushstring(L, ch->GetDesc()->GetHostName()); return 1; } { "get_ip", pc_get_ip },
Src/game/questlua_npc.cpp
int npc_get_ip(lua_State* L) { LPCHARACTER npc = CQuestManager::instance().GetCurrentNPCCharacterPtr(); if (npc && npc->IsPC()) lua_pushstring(L, npc->GetDesc()->GetHostName()); else lua_pushstring(L, ""); return 1; } { "get_ip", npc_get_ip },
#include "desc.h"
Bonus
SpoilerShit code (Not tested, only for see how to check function in count kill):
--[[ ########################################## # Quest: Blocking IP address to killings # # Date: 25/05/2016 # ########################################## ]] function Verification_Ip_Adress() local search_me = pc.get_ip() local search_enemy = npc.get_ip() local table_count_kill_ip = pc.getqf("count_ip_block") if search_me == search_enemy then pc.setqf("count_ip_block", pc.getqf("count_ip_block") + 1) end end function Verification_Block() local go_to_text_insult_find_by_race if pc.get_sex() == 0 then go_to_text_insult_find_by_race = "gay" else go_to_text_insult_find_by_race = "bitch" end local block_me = pc.get_ip() local block_enemy = npc.get_ip() local list_block_ = pc.getqf("count_ip_block") if block_me == block_enemy and list_block_ == 10 then say("You're too "..go_to_text_insult_find_by_race.."!") pc.setqf("count_ip_block", 0) -- restart ---- your function for ban or etc etc... -------- return end end when kill with npc.is_pc() begin if get_time() < pc.getqf("time_kill") then syschat("Not yet passed the 5 minutes after the last killing!") return end pvp_global.Verification_Block() pvp_global.Verification_Ip_Adress() pc.setqf("time_kill", get_time()+ 300) end end
These features already exist in the source, but for some it may have been helpful.
- 6
- 1
-
Check my profile and add me in skype, and i help you with function for look like that:
- 1
-
I see you want to use for description in refine, you can start with this:
def OverInItem(self, value_t): global description_refine import grp if description_refine: table_description = { 30501 : ["[1] Value text","[2] Value text","[3] Value text"], 30502 : ["[1] Value text","[2] Value text","[3] Value text"], 30503 : ["[1] Value text","[2] Value text","[3] Value text"], 30504 : ["[1] Value text","[2] Value text","[3] Value text"], 30505 : ["[1] Value text","[2] Value text","[3] Value text"], 30506 : ["[1] Value text","[2] Value text","[3] Value text"], } try: self.tooltipItem.ClearToolTip() item.SelectItem(description_refine[value_t]) self.tooltipItem.AutoAppendTextLine("%s" % item.GetItemName(), self.tooltipItem.TITLE_COLOR) self.tooltipItem.AppendSpace(5) self.tooltipItem.AutoAppendTextLine("Test value:", self.SPECIAL_POSITIVE_COLOR) for i in xrange(len(table_description[description_refine[value_t]])): self.tooltipItem.AutoAppendTextLine("%s" % table_description[description_refine[value_t]][i]) self.tooltipItem.AlignHorizonalCenter() self.tooltipItem.ShowToolTip() except: pass
- 1
-
If I understood well you want it, here is a simple function (i not tested):
// Search in game.py function OnUpdate and add:
if 1 == constInfo.ENABLE_PICKUP: self.PickUpItem()
// Search:
onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7)
// Add bellow:
onPressKeyDict[app.DIK_F5] = lambda : self.__EnablePickUpItem()
def __EnablePickUpItem(self): global CHECK_ACTIVE_PICKUP if CHECK_ACTIVE_PICKUP == 0: CHECK_ACTIVE_PICKUP = 1 constInfo.ENABLE_PICKUP = 1 else: CHECK_ACTIVE_PICKUP = 0 constInfo.ENABLE_PICKUP = 0
// Search:
testAlignment = 0
// Add bellow:
CHECK_ACTIVE_PICKUP = 0
// Add in constInfo.py:
ENABLE_PICKUP = 0
- 1
-
3 hours ago, MartaSampaio said:
I believe you can add a qf counting the kills, using Vegas example
But having it reset after some time, for example 15min?
Dont actually know how to write it, just supposing it could be that way, im sure theres someone that may write it or even better then my example
It was written in 15 minutes, may be some mistakes and the code is not one of the best.
--[[ ########################################## # Dev: VegaS # # Quest: Blocking IP address to killings # # Date: 25/05/2016 # ########################################## ]] quest pvp_global begin state start begin function Verification_Ip_Adress() local search_me = pc.get_ip() local search_enemy = npc.get_ip() local table_count_kill_ip = pc.getqf("count_ip_block") if search_me == search_enemy then pc.setqf("count_ip_block", pc.getqf("count_ip_block") + 1) end end function Verification_Block() local go_to_text_insult_find_by_race if pc.get_sex() == 0 then go_to_text_insult_find_by_race = "gay" else go_to_text_insult_find_by_race = "bitch" end local block_me = pc.get_ip() local block_enemy = npc.get_ip() local list_block_ = pc.getqf("count_ip_block") if block_me == block_enemy and list_block_ == 10 then say("You're too "..go_to_text_insult_find_by_race.."!") return end end when login with pc.level >= 1 begin set_state(player_kill) end end state player_kill begin when letter begin send_letter("Kill PvP") end when button or info begin say_title("Experts pvp") say_reward("Kill 30 player!") pc.setqf("state_kill", 30) q.set_counter("Kills left:", 30) set_state(kill) end end state kill begin when letter begin send_letter("Duel") end when button or info begin say("Your text........") say_reward("Kills left: "..pc.getqf("state_kill").." ") end when kill with npc.is_pc() begin if get_time() < pc.getqf("time_kill") then syschat("Not yet passed the 5 minutes after the last killing!") return end pvp_global.Verification_Block() local count_kill = pc.getqf("state_kill") - 1 if count_kill <= 30 then pvp_global.Verification_Ip_Adress() pc.setqf("state_kill", count_kill) q.set_counter("Kills left:", count_kill) pc.setqf("time_kill", get_time()+ 300) -- 5 minutes end if count_kill == 0 then say_title("Congratulations!") notice_all("".. pc.get_name() .." mission completed your details!") clear_letter() set_state(__COMPLETE__) end end end state __COMPLETE__ begin end end
3 hours ago, Exygo said:Don't forget #include "desc_client.h"
for quest_lua_npc
Is ok and, perhaps it already has:
#include "desc.h"
- 1
-
I made this 5 minutes .. why pay for this easy work? xD
Quest:
quest lua_function_vegas begin state start begin when kill with npc.is_pc() begin local global_insult_sex if pc.get_sex() == 0 then global_insult_sex = "gay" else global_insult_sex = "bitch" end local check_my_ip = pc.get_ip() local check_enemy_ip = npc.get_ip() if check_my_ip == check_enemy_ip then say("You're too "..global_insult_sex.."!") return end end end end
Server/quest_functions
pc.get_ip npc.get_ip
Src/game/questlua_pc.cpp
int pc_get_ip(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if(!ch) return 0; lua_pushstring(L, ch->GetDesc()->GetHostName()); return 1; } { "get_ip", pc_get_ip },
Src/game/questlua_npc.cpp
int npc_get_ip(lua_State* L) { LPCHARACTER npc = CQuestManager::instance().GetCurrentNPCCharacterPtr(); if (npc && npc->IsPC()) lua_pushstring(L, npc->GetDesc()->GetHostName()); else lua_pushstring(L, ""); return 1; } { "get_ip", npc_get_ip },
- 2
-
root/uiRefine.py search in class RefineDialogNew:
self.successPercentage.Hide()
and change with:
self.successPercentage.Show()
- 3
-
2 minutes ago, Wahmon said:
I edited the post already..
Is ok anyway..
Are you serious? xD
void CInstanceBase::__AttachEmpireEffect(DWORD eEmpire)
if (IsVIP()) return;
-
if (GetGMLevel() == GM_VIP) { m_afAffectFlag.Set(AFF_VIP); }
else if (GetGMLevel() == GM_VIP) { m_afAffectFlag.Set(AFF_VIP); }
if (IsVIP()) return;
- delete
For remove PK_PROTECTED .
- 1
-
29 minutes ago, Sonitex said:
Most of the python part is public on freakgamers but you need 50 freakin posts to read the link.. Their stupid rules -.-
Hahaha, without advertisement.
At that forum is posted only the board and thinboard, lol , is *most of the python part*, is 3% of code.
- 1
-
Not completely your tutorial, here i give you full parts xD
1. Search in char.cpp:
cannot_dead = false;
2. Add below:
costume_visible = true;
1. Search:
WORD CHARACTER::GetPart(BYTE bPartPos) const { assert(bPartPos < PART_MAX_NUM); return m_pointsInstant.parts[bPartPos]; }
2. Change with:
WORD CHARACTER::GetPart(BYTE bPartPos) const { assert(bPartPos < PART_MAX_NUM); if(bPartPos == PART_MAIN && GetWear(WEAR_COSTUME_BODY) && CostumeVisible() == false) if(const LPITEM pArmor = GetWear(WEAR_BODY)) return pArmor->GetVnum(); return m_pointsInstant.parts[bPartPos]; }
1. Search:
WORD CHARACTER::GetOriginalPart(BYTE bPartPos) const { switch (bPartPos) { case PART_MAIN: if (!IsPC()) return GetPart(PART_MAIN); else return m_pointsInstant.bBasePart; case PART_HAIR: return GetPart(PART_HAIR); case PART_ACCE: return GetPart(PART_ACCE); default: return 0; } }
2. Change with:
WORD CHARACTER::GetOriginalPart(BYTE bPartPos) const { switch(bPartPos) { case PART_MAIN: if(GetWear(WEAR_COSTUME_BODY) && CostumeVisible() == false) if(const LPITEM pArmor = GetWear(WEAR_BODY)) return pArmor->GetVnum(); if(!IsPC()) return GetPart(PART_MAIN); else return m_pointsInstant.bBasePart; case PART_HAIR: return GetPart(PART_HAIR); #ifdef __ENABLE_ACCE_ case PART_ACCE: return GetPart(PART_ACCE); #endif default: return 0; } }
1. Search in char.h:
void SetLastSyncTime(const timeval &tv) { memcpy(&m_tvLastSyncTime, &tv, sizeof(timeval)); } const timeval& GetLastSyncTime() { return m_tvLastSyncTime; } void SetSyncHackCount(int iCount) { m_iSyncHackCount = iCount;} int GetSyncHackCount() { return m_iSyncHackCount; }
2. Add below:
public: bool CostumeVisible() const { return costume_visible; }; void SetCostumeVisible(bool visible) { costume_visible = visible; }; private: bool costume_visible;
1. Search in item.cpp:
case ITEM_ARMOR: { if (0 != m_pOwner->GetWear(WEAR_COSTUME_BODY)) break; if (GetSubType() == ARMOR_BODY || GetSubType() == ARMOR_HEAD || GetSubType() == ARMOR_FOOTS || GetSubType() == ARMOR_SHIELD) { if (bAdd) { if (GetProto()->bSubType == ARMOR_BODY) m_pOwner->SetPart(PART_MAIN, GetVnum()); } else { if (GetProto()->bSubType == ARMOR_BODY) m_pOwner->SetPart(PART_MAIN, m_pOwner->GetOriginalPart(PART_MAIN)); } } } break;
2. Delete function and change with this:
case ITEM_ARMOR: { if(m_pOwner->GetWear(WEAR_COSTUME_BODY) && m_pOwner->CostumeVisible() == true) break; if(GetSubType() == ARMOR_BODY || GetSubType() == ARMOR_HEAD || GetSubType() == ARMOR_FOOTS || GetSubType() == ARMOR_SHIELD) { if(bAdd) { if(GetProto()->bSubType == ARMOR_BODY) m_pOwner->SetPart(PART_MAIN, GetVnum()); } else { if(GetProto()->bSubType == ARMOR_BODY) m_pOwner->SetPart(PART_MAIN, m_pOwner->GetOriginalPart(PART_MAIN)); } } } break;
1. Search:
case ITEM_COSTUME: { DWORD toSetValue = this->GetVnum(); EParts toSetPart = PART_MAX_NUM; if (GetSubType() == COSTUME_BODY) { toSetPart = PART_MAIN; if (false == bAdd) { const CItem* pArmor = m_pOwner->GetWear(WEAR_BODY); toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN); } }
2. Change with:
case ITEM_COSTUME: { DWORD toSetValue = this->GetVnum(); EParts toSetPart = PART_MAX_NUM; if(GetSubType() == COSTUME_BODY) { toSetPart = PART_MAIN; if(false == bAdd || (m_pOwner->GetWear(WEAR_BODY) && m_pOwner->CostumeVisible() == false)) { const CItem* pArmor = m_pOwner->GetWear(WEAR_BODY); toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN); } }
Good quest:
quest costume begin state start begin when login begin cmdchat("costume "..q.getcurrentquestindex()) end when button or info begin if pc.getqf("costume") == 1 then chat("You chose visibility costume.") pc.setqf("costume", 2) pc.costume(0) elseif pc.getqf("costume") == 2 then chat("You chose visibility armor.") pc.setqf("costume", 1) pc.costume(1) end end end end
quest login_costume_use begin state start begin when login with pc.getqf("block_quest") == 0 begin pc.setqf("block_quest", 1) pc.setf("costume", "costume", 1) end end end
- 8
-
And why is it necessary to make a reply with that? :
- price,
- bugs of the design,
- if there is a possibility for minor custom job (more like 2 small fixes) and if so,
- specify if there is an extra fee about custom job and how much is this fee...
When you can easily put it that people have to contact you through a private message or give your skype.
I apologize for this comment but it was only an opinion, not something bad.
-
1 hour ago, avertuss said:
It's work but it add bonus after relog and if i change align points to 0 this bonus don't remove.
if (FindAffect(ALIGNMENT_BONUS_1)) { if (GetRealAlignment() != NAME_ALIGNMENT_1) { RemoveAffect(ALIGNMENT_BONUS_1); //return false; } }
I apologize for this ugly code, but I'm very tired.
I haven't tested this, but I can help you more on skype, because we did not stay very long forum.
-
affect.h:
// 1) Search:
AFFECT_CUBE_12,
// 2) After make a new line and paste:
ALIGNMENT_BONUS_1, ALIGNMENT_BONUS_2,
Code for use:
#ifdef __ALIGNMENT_BONUS__ if (GetRealAlignment() == NAME_ALIGNMENT_1) { AddAffect(ALIGNMENT_BONUS_1, POINT_MAX_HP, VALUE_BONUS_ALIGNMENT_1, 0, ALIGNMENT_TIME, 0, true); } if (GetRealAlignment() == NAME_ALIGNMENT_2) { AddAffect(ALIGNMENT_BONUS_2, POINT_MAX_HP, VALUE_BONUS_ALIGNMENT_2, 0, ALIGNMENT_TIME, 0, true); } #endif
service.h:
#define __ALIGNMENT_BONUS__ #define NAME_ALIGNMENT_1 100000 #define NAME_ALIGNMENT_2 200000 #define ALIGNMENT_TIME (60*60*24*365) #define VALUE_BONUS_ALIGNMENT_1 1000 #define VALUE_BONUS_ALIGNMENT_2 2000
You can add code execution in input_login.cpp -> EnterGame
- 1
-
-
char.cpp:
Search and delete:
if (GetRealAlignment() < 0) { if (IsEquipUniqueItem(UNIQUE_ITEM_FASTER_ALIGNMENT_UP_BY_TIME)) UpdateAlignment(120 * (dwPlayedTime / 60000)); else UpdateAlignment(60 * (dwPlayedTime / 60000)); } else UpdateAlignment(5 * (dwPlayedTime / 60000)); }
If you want when you sign King item (70050) as your degree of alignment to grow then alter the function only with this:
if (GetRealAlignment() < 0) { if (IsEquipUniqueItem(UNIQUE_ITEM_FASTER_ALIGNMENT_UP_BY_TIME)) UpdateAlignment(120 * (dwPlayedTime / 60000)); }
And search in char_battle.cpp and delete function:
if (pkAttacker->IsPC()) { if (GetLevel() - pkAttacker->GetLevel() >= -10) if (pkAttacker->GetRealAlignment() < 0) { if (pkAttacker->IsEquipUniqueItem(UNIQUE_ITEM_FASTER_ALIGNMENT_UP_BY_KILL)) pkAttacker->UpdateAlignment(14); else pkAttacker->UpdateAlignment(7); } else pkAttacker->UpdateAlignment(2);
I hope I understood what you said, correct me if not, this is want you want?
- 2
-
# 1.) Search in game.py:
onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7)
# 2.) Add below:
onPressKeyDict[app.DIK_F5] = lambda : self.LoadScript()
def LoadScript(self): import mtdbg mtdbg.LoadMichaFile("files_work_1.py", "NameClassWindow")
Add in root new files mtdbg.py and he added:
import ui import imp as micha_imp global actual_michabg_files actual_michabg_files = {} class LoadMichaFile(ui.ScriptWindow): def __init__(self, micha_f, micha): global actual_michabg_files ui.ScriptWindow.__init__(self) self.Show() k = micha_f + "|"+ micha if(actual_michabg_files.has_key(k)): if(actual_michabg_files[k] != None): actual_michabg_files[k].Hide() actual_michabg_files[k] = None self.s = micha_imp.load_source(micha, micha_f) self._c= getattr(self.s, micha)() self._c.Show() actual_michabg_files[k] = self._c print "Reloaded "+ micha_f + "." + micha def __del__(self): ui.ScriptWindow.__del__(self)
Example of use:
Put the script you want to edit root client and rename it in files_work_1.py then enter and edit your class like:
class NameClassWindow(ui.BoardWithTitleBar): # --* NEW
Thanks to @Micha aka xCPx
- 1
-
You can start with this:
- 1
-
13 minutes ago, wezt said:
Here is an other way with using socket_pct from item_proto (you'll be able to set different effects for costumes):
In UserInterface\InstanceBase.cpp -> UINT CInstanceBase::__GetRefinedEffect(CItemData* pItem) add after 'case CItemData::ITEM_TYPE_ARMOR:':
case CItemData::ITEM_TYPE_COSTUME: if (refine < 7) return 0; if (pItem->GetSubType() == CItemData::COSTUME_BODY) { __ClearArmorRefineEffect(); m_armorRefineEffect = EFFECT_REFINED+EFFECT_BODYARMOR_REFINED7+refine-7; __AttachEffect(m_armorRefineEffect); } break;
Regards.
Another solution easier:
#ifdef __ENABLE_EFFECT_COSTUME_FUNCTION_PROTO_ case CItemData::ITEM_TYPE_COSTUME: if (pItem->GetSubType() == CItemData::COSTUME_BODY) { DWORD vnum = pItem->GetIndex(); long value_proto = pItem->GetValue(3); if (value_proto == 1000) __AttachEffect(EFFECT_REFINED+EFFECT_COSTUME_TITAN_1); else if (value_proto == 1500) __AttachEffect(EFFECT_REFINED+EFFECT_COSTUME_TITAN_2); else if (value_proto == 2000) __AttachEffect(EFFECT_REFINED+EFFECT_COSTUME_TITAN_3); else if (value_proto == 2500) __AttachEffect(EFFECT_REFINED+EFFECT_COSTUME_TITAN_4); else if (value_proto == 3000) __AttachEffect(EFFECT_REFINED+EFFECT_COSTUME_TITAN_5); } } #endif
- 1
- 1
-
For yellow:
colorInfo.py:
CHR_NAME_RGB_MOB = (235, 22, 9) CHR_NAME_RGB_NPC = (122, 231, 93) CHR_NAME_RGB_PC = (255, 215, 76) CHR_NAME_RGB_PK = (180, 100, 0) CHR_NAME_RGB_PVP = (238, 54, 223) CHR_NAME_RGB_PARTY = (128, 192, 255) CHR_NAME_RGB_WARP = (136, 218, 241) CHR_NAME_RGB_WAYPOINT = (255, 255, 255)
Because in uiMiniMap.py exist:
self.tooltipInfo.SetTextColor(dwTextColor)
With colors and functions are loaded here:
And check your function in introLoading.py:
- 1
Blocking IP Address to Killings
in Quest Functions & Features
Posted
Ok girls