habe mir überlegt ich Release mal wieder was.
Da ich momentan an der Source Arbeite, und bissel dazu lerne,
habe ich eine Funktion geschrieben, wo mit man Yang Wegwerfen EIN/AUS stellen kann.
Für ein Anfänger habe ich des gut hinbekommen
Naja dann kommen wir mal zum einfügen.
Geht in euer Source Ordner /Server/game/src
Öffnet die "config.cpp"
Sucht nach:
Code:
int gPlayerMaxLevel = 99;
Code:
bool yang_discard = false;
Code:
TOKEN("max_level")
Code:
TOKEN("yang_discard") { int flag = 0; str_to_number(flag, value_string); //if (1 == flag && LC_IsEurope() ) if (1 == flag) { yang_discard = true; fprintf(stderr, "YANG_DISCARD: %i\n", flag); } }
Ganz oben bei:
Code:
const int ITEM_BROKEN_METIN_VNUM = 28960;
Code:
extern bool yang_discard;
Sucht nach:
Code:
extern int gPlayerMaxLevel;
Code:
extern bool yang_discard;
Ihr macht nach "extern bool yang_discard;" 2 mal Enter.
Und fügt dann das hier noch ein.
Code:
extern long long LLMINMAX(long long min, long long value, long long max);
Sucht nach:
Code:
bool CHARACTER::DropGold(int gold)
Code:
if (gold <= 0 || gold > GetGold()) return false;
Code:
if(yang_discard) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("È¢À»¡¼*´Ï´Ù.")); } return true;
Code:
bool CHARACTER::DropGold(int gold) { if (gold <= 0 || gold > GetGold()) return false; if(yang_discard) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("È¢À»¡¼*´Ï´Ù.")); } return true; if (!CanHandleItem()) return false; if (0 != g_GoldDropTimeLimitValue) { if (get_dword_time() < m_dwLastGoldDropTime+g_GoldDropTimeLimitValue) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¾ÆÁ÷ °ñµå¸¦ ¹ö¸± ¼ö ¾ø½À´Ï´Ù.")); return false; } }
Noch ein kleiner fix die ihn noch nicht haben sollten.
Wenn ihr Yang wegwerfen tut, und im Chat steht was auf chinesisch fehlt was in der "locale_string.txt"
Ihr öffnet eure "locale_string.txt" und fügt ganz unden ein:
Code:
"¶³¾îÁø ¾ÆÀÌÅÛÀº %dºÐ ÈÄ »ç¶óÁý´Ï´Ù."; "Du hast Yang fallen gelassen.";
Update:
Ich habe noch mal ein Update, wenn ihr jetzt inGame Versucht Yang wegzuwerfen dann bekommt ihr im Chat eine Nachticht. Kommt nur wenn "YANG_DISCARD: 1" Aktiviert ist.
Habe das selbe noch mal für Items gemacht.
Selbe Spiel noch mal
Öffnet die "config.cpp"
Sucht nach:
Code:
int gPlayerMaxLevel = 99;
Code:
bool item_discard = false;
Code:
TOKEN("max_level")
Code:
TOKEN("item_discard") { int flag = 0; str_to_number(flag, value_string); //if (1 == flag && LC_IsEurope() ) if (1 == flag) { item_discard = true; fprintf(stderr, "ITEM_DISCARD: %i\n", flag); } }
Jetzt müsst ihr die "config.h" öffnen.
Sucht nach:
Code:
extern int gPlayerMaxLevel;
Code:
extern bool item_discard;
WICHTIG:
Ihr macht nach "extern bool item_discard;" 2 mal Enter.
Und fügt dann das hier noch ein.
Code:
extern long long LLMINMAX(long long min, long long value, long long max);
Sucht nach:
Code:
bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)
Code:
{ LPITEM item = NULL;
Code:
if(item_discard) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("È¢À»¡¼*.")); } return true;
Sollte dann so aussehen:
Code:
bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount) { LPITEM item = NULL; if(item_discard) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("È¢À»¡¼*.")); } return true; if (!CanHandleItem()) { if (NULL != DragonSoul_RefineWindow_GetOpener()) ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°*È*âÀ» ¿¬ »óÅ¿¡¼*´Â ¾ÆÀÌÅÛÀ» ¿Å±æ ¼ö ¾ø½À´Ï´Ù.")); return false; } if (IsDead()) return false; if (!IsValidItemPosition(Cell) || !(item = GetItem(Cell))) return false; if (item->IsExchanging()) return false; if (true == item->isLocked()) return false; if (quest::CQuestManager::instance().GetPCForce(GetPlayerID())->IsRunning() == true) return false; if (IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_DROP | ITEM_ANTIFLAG_GIVE)) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¹ö¸± ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù.")); return false; } if (bCount == 0 || bCount > item->GetCount()) bCount = item->GetCount(); SyncQuickslot(QUICKSLOT_TYPE_ITEM, Cell.cell, 255); // Quickslot ¿¡¼* Áö¿ò LPITEM pkItemToDrop; if (bCount == item->GetCount()) { item->RemoveFromCharacter(); pkItemToDrop = item; } else { if (bCount == 0) { if (test_server) sys_log(0, "[DROP_ITEM] drop item count == 0"); return false; } // check non-split items for china //if (LC_IsNewCIBN()) // if (item->GetVnum() == 71095 || item->GetVnum() == 71050 || item->GetVnum() == 70038) // return false; item->SetCount(item->GetCount() - bCount); ITEM_MANAGER::instance().FlushDelayedSave(item); pkItemToDrop = ITEM_MANAGER::instance().CreateItem(item->GetVnum(), bCount); // copy item socket -- by mhh FN_copy_item_socket(pkItemToDrop, item); char szBuf[51 + 1]; snprintf(szBuf, sizeof(szBuf), "%u %u", pkItemToDrop->GetID(), pkItemToDrop->GetCount()); LogManager::instance().ItemLog(this, item, "ITEM_SPLIT", szBuf); } PIXEL_POSITION pxPos = GetXYZ(); if (pkItemToDrop->AddToGround(GetMapIndex(), pxPos)) { // Çѱ¹¿¡´Â ¾ÆÀÌÅÛÀ» ¹ö¸®°í º¹±¸ÇØ´Þ¶ó´Â Áø»óÀ¯ÀúµéÀÌ ¸¹¾Æ¼* // ¾ÆÀÌÅÛÀ» ¹Ù´Ú¿¡ ¹ö¸± ½Ã ¼Ó¼º·Î±×¸¦ ³²±ä´Ù. if (LC_IsYMIR()) item->AttrLog(); ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¶³¾îÁø ¾ÆÀÌÅÛÀº 3ºÐ ÈÄ »ç¶óÁý´Ï´Ù.")); pkItemToDrop->StartDestroyEvent(item_drop_time); ITEM_MANAGER::instance().FlushDelayedSave(pkItemToDrop); char szHint[32 + 1]; snprintf(szHint, sizeof(szHint), "%s %u %u", pkItemToDrop->GetName(), pkItemToDrop->GetCount(), pkItemToDrop->GetOriginalVnum()); LogManager::instance().ItemLog(this, pkItemToDrop, "DROP", szHint); //Motion(MOTION_PICKUP); } return true; }
Code:
"È¢À»¡¼*."; "Items wegwerfen wurde Deaktiviert."; "È¢À»¡¼*´Ï´Ù."; "Yang wegwerfen wurde Deaktiviert.";
WICHTIGER HINWEIS:
CONFIG "SERVER" ITEM_DISCARD: 1 reinschreiben. Mit 1 ist das wegwerfen nicht mehr möglich.
Wenn ihr beide sachen benutzt also YANG & ITEM braucht ihr nich zwei mal das hier einfügen
Code:
extern long long LLMINMAX(long long min, long long value, long long max);
Ich hoffe es gefällt euch, und einige können es villt gebrauchen.
MFG
EDIT:
Code:
if(yang_discard) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("È¢À»¡¼*´Ï´Ù.")); return false; }
Code:
if(item_discard) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("È¢À»¡¼*.")); return false; }